function [UCoef,ExtraInfo,ExitFlag] ...
        =SteadyState_Bellman(PP,SS,UCoefp,...
                             ValItNum,ColItNum,MaxItNum,InfoPrintFlag,DampenCoef)

%% Premilinary
UnitNum     =   ValItNum+ColItNum;
if UnitNum<=0
    error('Error in Iteration Number!');
end
Unit        =   [zeros(ValItNum,1);ones(ColItNum,1)];
ID          =   [repmat(Unit,[floor(MaxItNum/UnitNum),1]);...
                 Unit(1:mod(MaxItNum,UnitNum))];
ItTol       =   PP.ItTol*10;

%% Iteration
for ItCounter=1:MaxItNum
    
    switch ID(ItCounter)
        case 0
            Flag    =   'Value Iteration';
            [UCoef,ExtraInfo] ...
                    =   Bellman_U(PP,SS,...
                                  SS.Pir,SS.dE,SS.T,SS.Profit,SS.TAU,SS.ir_dom,SS.ir_ext,SS.w_N,SS.w_H, ...
                                  SS.PortfolioInfo,SS.PortfolioInfo,UCoefp,0);
        case 1
            Flag    =   'Collocation';
            [UCoef,ExtraInfo] ...
                    =   Bellman_U(PP,SS,...
                                  SS.Pir,SS.dE,SS.T,SS.Profit,SS.TAU,SS.ir_dom,SS.ir_ext,SS.w_N,SS.w_H, ...
                                  SS.PortfolioInfo,SS.PortfolioInfo,UCoefp,1);
    end
    
    
    ItDiff      =   norm(UCoef-UCoefp);
    UCoefp      =   DampenCoef*UCoef+(1-DampenCoef)*UCoefp;
    if InfoPrintFlag
        fprintf([num2str(ItCounter),', ',Flag,': ', ...
                 'diff=',num2str(ItDiff,'%.2e'),'\n']);
    end
    
    if ItDiff<ItTol
        break
    end
end

if ItCounter>MaxItNum || ItDiff>=ItTol
    ExitFlag    =   0;
else
    ExitFlag    =   1;
end